# 导入 json模块
import json
# 导包 导入功能Line构建折线图对象
from pyecharts.charts import Line
# 导入功能 标题和图例,工具箱,视觉映射
from pyecharts.options import TitleOpts, LegendOpts, ToolboxOpts, VisualMapOpts


# 得到文件准备处理数据
美国疫情数据对象 = open("/资料数据/美国.txt", "r", encoding="utf-8")
文件内容 = 美国疫情数据对象.read()  # 读取全部内容

# 去掉不合json规范的文件开头
下标 = 文件内容.index("(")  # 搜索 "(" 以前的都要删除
文件内容 = 文件内容[下标+1::]  # 重新复写文件这样开头不合规的地方就没有了
print("1:", 文件内容)

# 去掉不合json规范的文件的末尾
文件内容 = 文件内容[::-1]  # 把文件倒过来
下标 = 文件内容.index(")")  # 搜索 ")" 以前的都要删除
文件内容 = 文件内容[下标+1::]  # 重新复写文件这样开头不合规的地方就没有了
文件内容 = 文件内容[::-1]  # 在把文件倒过来 ,相当于正过来文件
print("2:", 文件内容)


# json格式转换成Python字典
转换的数据 = json.loads(文件内容)
print("3:", type(转换的数据))  # 查看转换的数据是否,是 字典类型
print("4:", 转换的数据)

# 获取 trend(疫情趋势) 的 对应的key(密钥)
# 由于嵌套过多我们分开来分层截取
data列表数据 = 转换的数据['data']  # 先得到第一层第三元素后面的所有数据 得到一个列表
print("5:", data列表数据)
字典数据 = data列表数据[0]  # 列表里只有一个单独的 字典类型 元素,列表第一个元素是0号所以我们取值零
print("6:", 字典数据)
trend字典数据 = 字典数据['trend']  # 把字典里 疫情趋势 对应的数据提取出来 也是一个字典
print("7:", trend字典数据)


# 获取 日期 数据用于X轴
X轴日期数据 = trend字典数据['updateDate']  # 这个密钥对应的是个 列表 记录了日期
# 只取2020年这年的 到下标313 ,切片下标最后数不取所以下标要进一位
# X轴日期数据 = X轴日期数据[:314:1]
print(f'8: X轴日期数据 数据类型是:{type(X轴日期数据)}')
print("9:", X轴日期数据)

# 获取 确诊 数据用于Y轴
Y轴确诊数据 = trend字典数据['list'][0]['data']
# 因为上面我们取的是一整年的所以这里要与X轴数据相对应 切个片
# Y轴确诊数据 = Y轴确诊数据[:314:1]
print(f'10: Y轴确诊数据 数据类型是:{type(Y轴确诊数据)}')
print("11:", Y轴确诊数据)

"""
以上的可以直接写成下面的,我们为了理解方便.分开写了
X轴日期数据 = 转换的数据['data'][0]['trend']['updateDate'][:314:1]
Y轴确诊数据 = 转换的数据['data'][0]['trend']['list'][0]['data'][:314:1]

"""

# 生成图表
折线图 = Line()

折线图.add_xaxis(X轴日期数据)
折线图.add_yaxis("确诊人数", Y轴确诊数据)
# 折线图全局设置
折线图.set_global_opts(
    # 标题选项  pos是位置 left是左边 (这里我们居中)  bottom是底部 (底部百分之1)
    title_opts=TitleOpts(title="美国2020年疫情确诊人数", pos_left="center", pos_bottom="1%"),
    # 图例选项 这里是显示
    legend_opts=LegendOpts(is_show=True),
    # 工具箱选项 这里是显示
    toolbox_opts=ToolboxOpts(is_show=True),
    # 视觉映射 这里是显示
    visualmap_opts=VisualMapOpts(is_show=True)
)

折线图.render()


